﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using Fuyao.Business.Entities.Models;
using System.Data.Common;

namespace Fuyao.Data.SQLServer.DAO
{
    public class DAOMenu
    {
        string strCnx = clsConexionDB.getConexionSQL();


        public List<Menu> getMenu(int? perfilID)
        {

            Menu oMenu = null;
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);
            List<Menu> listMenu = new List<Menu>();
            try
            {
                strCommand.Append("SELECT MenuID, NombreMenu,MenuPadreID,Estado,NombreFormulario,NombreImagen, ");
                strCommand.Append("isnull((select isnull(MenuID,0) from MenuXPerfil where MenuID = Menu.MenuID and PerfilID = @PerfilID ),0) as TieneAcceso ");
                strCommand.Append("FROM Menu WHERE Estado = @Estado and MenuPadreID is null ");

                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);

                sqlCommand.Parameters.Add("@Estado", SqlDbType.Bit).Value =true;
                sqlCommand.Parameters.Add("@PerfilID", SqlDbType.Int).Value = perfilID;

                cnx.Open();
                SqlDataReader dr = sqlCommand.ExecuteReader();

                while (dr.Read())
                {
                    oMenu = new Menu();

                    if (!Convert.IsDBNull(dr["MenuID"])) oMenu.MenuID = Convert.ToInt32(dr["MenuID"]);
                    if (!Convert.IsDBNull(dr["NombreMenu"])) oMenu.NombreMenu = Convert.ToString(dr["NombreMenu"]);
                    if (!Convert.IsDBNull(dr["MenuPadreID"])) oMenu.MenuPadreID = Convert.ToInt32(dr["MenuPadreID"]);
                    if (!Convert.IsDBNull(dr["Estado"])) oMenu.Estado = Convert.ToBoolean(dr["Estado"]);
                    if (!Convert.IsDBNull(dr["NombreFormulario"])) oMenu.NombreFormulario = Convert.ToString(dr["NombreFormulario"]);
                    if (!Convert.IsDBNull(dr["NombreImagen"])) oMenu.NombreImagen = Convert.ToString(dr["NombreImagen"]);
                    if (!Convert.IsDBNull(dr["TieneAcceso"]))
                        oMenu.TieneAcceso = Convert.ToBoolean(dr["TieneAcceso"]); else oMenu.TieneAcceso = false;

                    listMenu.Add(oMenu);
                }

                dr.Close();
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return listMenu;
        }

        public List<Menu> getMenuChild(int? perfilID)
        {

            Menu oMenuChild = null;
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);
            List<Menu> listMenuChild = new List<Menu>();
            try
            {
                strCommand.Append("SELECT MenuID, UPPER(NombreMenu) NombreMenu,MenuPadreID,Estado,NombreFormulario,NombreImagen, ");
                strCommand.Append("isnull((select isnull(MenuID,0) from MenuXPerfil where MenuID = Menu.MenuID and PerfilID = @PerfilID ),0) as TieneAcceso ");
                strCommand.Append("FROM Menu WHERE Estado = @Estado and MenuPadreID is not null ");

                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);

                sqlCommand.Parameters.Add("@Estado", SqlDbType.Bit).Value = true;
                sqlCommand.Parameters.Add("@PerfilID", SqlDbType.Int).Value = perfilID;

                cnx.Open();
                SqlDataReader dr = sqlCommand.ExecuteReader();

                while (dr.Read())
                {
                    oMenuChild = new Menu();

                    if (!Convert.IsDBNull(dr["MenuID"])) oMenuChild.MenuID = Convert.ToInt32(dr["MenuID"]);
                    if (!Convert.IsDBNull(dr["NombreMenu"])) oMenuChild.NombreMenu = Convert.ToString(dr["NombreMenu"]);
                    if (!Convert.IsDBNull(dr["MenuPadreID"])) oMenuChild.MenuPadreID = Convert.ToInt32(dr["MenuPadreID"]);
                    if (!Convert.IsDBNull(dr["Estado"])) oMenuChild.Estado = Convert.ToBoolean(dr["Estado"]);
                    if (!Convert.IsDBNull(dr["NombreFormulario"])) oMenuChild.NombreFormulario = Convert.ToString(dr["NombreFormulario"]);
                    if (!Convert.IsDBNull(dr["NombreImagen"])) oMenuChild.NombreImagen = Convert.ToString(dr["NombreImagen"]);
                    if (!Convert.IsDBNull(dr["TieneAcceso"])) oMenuChild.TieneAcceso = Convert.ToBoolean(dr["TieneAcceso"]); else oMenuChild.TieneAcceso = false;

                    listMenuChild.Add(oMenuChild);
                }

                dr.Close();
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return listMenuChild;
        }

    }
}
